#include<stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>

// 我没有指明路径
#define FILE_NAME(number) "log.txt"#number 

// 每一个宏，对应的数值，只有一个比特位是1,彼此位置不重叠
//#define ONE (1<<0)
//#define TWO (1<<1)
//#define THREE  (1<<2)
//#define FOUR (1<<3)

//void show(int flags)
//{
//    if(flags & ONE) printf("one\n");
//    if(flags & TWO) printf("two\n");
//    if(flags & THREE) printf("three\n");
//    if(flags & FOUR) printf("four\n");
//}


int main()
{
    printf("stdin->fd: %d\n", stdin->_fileno);
    printf("stdout->fd: %d\n", stdout->_fileno);
    printf("stderr->fd: %d\n", stderr->_fileno);
    umask(0);
    // "w" -> O_WRONLY | O_CREAT | O_TRUNC, 0666, O_APPEND
    // "a"
    int fd0 = open(FILE_NAME(1), O_WRONLY | O_CREAT | O_APPEND, 0666);
    int fd1 = open(FILE_NAME(2), O_WRONLY | O_CREAT | O_APPEND, 0666);
    int fd2 = open(FILE_NAME(3), O_WRONLY | O_CREAT | O_APPEND, 0666);
    int fd3 = open(FILE_NAME(4), O_WRONLY | O_CREAT | O_APPEND, 0666);
    int fd4 = open(FILE_NAME(5), O_WRONLY | O_CREAT | O_APPEND, 0666);
    //int fd = open(FILE_NAME, O_RDONLY);
   // if(fd < 0)
   // {
   //     perror("open");
   //     return 1;
   // }

   // char buffer[1024];
   // ssize_t num = read(fd, buffer, sizeof(buffer)-1);
   // if(num > 0) buffer[num] = 0; // 0, '\0', NULL -> 0
   // printf("%s", buffer);



   // int cnt = 5;
   // char outBuffer[64];
   // while(cnt)
   // {
   //     sprintf(outBuffer, "%s:%d\n", "aaaa", cnt--);
   //     // 你以\0作为字符串的结尾，是C语言的规定，和我文件有什么关系呢？
   //     write(fd, outBuffer, strlen(outBuffer)); //向文件中写入string的时候，要不要+1 ? 1 0
   // }

    printf("fd: %d\n", fd0);
    printf("fd: %d\n", fd1);
    printf("fd: %d\n", fd2);
    printf("fd: %d\n", fd3);
    printf("fd: %d\n", fd4);
    
    close(fd0);
    close(fd1);
    close(fd2);
    close(fd3);
    close(fd4);







    // 细节问题
    // 以w方式单纯的打开文件，c会自动清空内部的数据
    
//    show(ONE);
//    printf("-----------------------\n");
//    show(TWO);
//    printf("-----------------------\n");
//    show(ONE | TWO);
//    printf("-----------------------\n");
//    show(ONE | TWO | THREE);
//    printf("-----------------------\n");
//    show(ONE | TWO | THREE | FOUR);
//    printf("-----------------------\n");
//


    // 0666 & ~umask
//    FILE *fp = fopen(FILE_NAME, "w"); //r,w, r+(读写,不存在出错),w+(读写, 不存在创建), a(append, 追加), a+()
//    //FILE *fp = fopen(FILE_NAME, "r"); //r,w, r+(读写,不存在出错),w+(读写, 不存在创建), a(append, 追加), a+()
//    //FILE *fp = fopen(FILE_NAME, "a"); //r,w, r+(读写,不存在出错),w+(读写, 不存在创建), a(append, 追加), a+()
//    if(NULL == fp)
//    {
//        perror("fopen"); //?
//        return 1;
//    }
//
//   // char buffer[64];
//   // while(fgets(buffer, sizeof(buffer) - 1, fp) != NULL)
//   // {
//   //     buffer[strlen(buffer) - 1] = 0;
//   //     puts(buffer);
//   // }
//
//    //int cnt = 5;
//    //while(cnt)
//    //{
//    //    fprintf(fp, "%s:%d\n", "hello bit", cnt--);
//    //}
//
//    fclose(fp);
//






















//    chdir("/home/whb");
//    while(1)
//    {
//        printf("我是一个进程: %d\n", getpid());
//        sleep(1);
//    }
}
